// pages/clubVerify/clubVerify.js
const util = require('../../utils/util.js');
const api = require('../../config/api.js');

Page({
  data: {
    invitationCode: '',
    groupImage: '',
    personalImage: '',
    groupImageFileId: '',
    personalImageFileId: '',
    isSubmitted: false // 标记是否已提交成功
  },

  onLoad: function (options) {
    console.log('ClubVerify页面加载');
    // 页面加载时的逻辑
  },

  onReady: function () {
    console.log('ClubVerify页面渲染完成');
  },

  onShow: function () {
    console.log('ClubVerify页面显示');
  },

  onHide: function () {
    // 页面隐藏
  },

  onUnload: function () {
    // 页面卸载时，如果未提交成功，则删除所有已上传的文件
    // 如果已经提交成功，则不删除文件（因为后端可能已经保存）
    if (!this.data.isSubmitted) {
      const fileIds = [];
      
      if (this.data.groupImageFileId) {
        fileIds.push(this.data.groupImageFileId);
      }
      
      if (this.data.personalImageFileId) {
        fileIds.push(this.data.personalImageFileId);
      }
      
      if (fileIds.length > 0) {
        wx.cloud.deleteFile({
          fileList: fileIds,
          success: (res) => {
            console.log('页面卸载时删除文件成功:', res);
          },
          fail: (err) => {
            console.error('页面卸载时删除文件失败:', err);
          }
        });
      }
    }
  },

  onPullDownRefresh: function () {
    wx.stopPullDownRefresh();
  },

  onReachBottom: function () {
    // 页面上拉触底事件的处理函数
  },

  onShareAppMessage: function () {
    return {
      title: '俱乐部成员验证',
      path: '/pages/clubVerify/clubVerify'
    };
  },

  // 返回按钮点击
  onBackClick: function () {
    console.log('返回按钮点击');
    wx.navigateBack({
      success: function () {
        console.log('返回成功');
      },
      fail: function () {
        console.log('返回失败');
      }
    });
  },

  // 邀请码输入
  onInvitationCodeInput: function (e) {
    console.log('邀请码输入:', e.detail.value);
    this.setData({
      invitationCode: e.detail.value
    });
  },

  // 上传所在群截图
  onUploadGroupImage: function () {
    console.log('上传所在群截图');
    this._uploadImage(true);
  },

  // 替换所在群截图
  onReplaceGroupImage: function () {
    console.log('替换所在群截图');
    this._uploadImage(true);
  },

  // 上传证明本人截图
  onUploadPersonalImage: function () {
    console.log('上传证明本人截图');
    this._uploadImage(false);
  },

  // 替换证明本人截图
  onReplacePersonalImage: function () {
    console.log('替换证明本人截图');
    this._uploadImage(false);
  },

  // 删除所在群截图
  onRemoveGroupImage: function () {
    console.log('删除所在群截图');
    const fileId = this.data.groupImageFileId;
    this._removeImage(fileId);
    this.setData({
      groupImage: '',
      groupImageFileId: ''
    });
    wx.showToast({
      title: '已删除',
      icon: 'success'
    });
  },

  // 删除证明本人截图
  onRemovePersonalImage: function () {
    console.log('删除证明本人截图');
    const fileId = this.data.personalImageFileId;
    this._removeImage(fileId);
    this.setData({
      personalImage: '',
      personalImageFileId: ''
    });
    wx.showToast({
      title: '已删除',
      icon: 'success'
    });
  },

  // 通用上传图片方法
  _uploadImage: function (isGroup) {
    const that = this;
    
    // 如果已有图片，先删除旧的 fileID
    const oldFileId = isGroup ? this.data.groupImageFileId : this.data.personalImageFileId;
    
    wx.chooseImage({
      count: 1,
      sizeType: ['compressed'],
      sourceType: ['album', 'camera'],
      success: (res) => {
        console.log('选择图片成功:', res);
        const tempFilePath = res.tempFilePaths[0];
        
        // 开始上传
        wx.showLoading({
          title: '上传中...',
          mask: true
        });

        // 生成文件路径，包含时间戳和随机数
        const filePath = `club-verify/${Date.now()}-${Math.random().toString(36).substring(7)}.jpg`;
        
        // 使用wx.cloud.uploadFile上传文件
        wx.cloud.uploadFile({
          cloudPath: filePath,
          filePath: tempFilePath,
          success: (uploadRes) => {
            console.log('上传成功:', uploadRes);
            
            // 如果上传成功，删除旧的云端文件
            if (oldFileId) {
              that._removeImage(oldFileId);
            }
            
            // 根据类型更新对应的数据
            if (isGroup) {
              that.setData({
                groupImage: tempFilePath,
                groupImageFileId: uploadRes.fileID
              });
            } else {
              that.setData({
                personalImage: tempFilePath,
                personalImageFileId: uploadRes.fileID
              });
            }
            
            wx.hideLoading();
            wx.showToast({
              title: '上传成功',
              icon: 'success'
            });
          },
          fail: (err) => {
            console.error('上传失败:', err);
            wx.hideLoading();
            wx.showToast({
              title: '上传失败，请重试',
              icon: 'none'
            });
          }
        });
      },
      fail: (err) => {
        console.error('选择图片失败:', err);
        wx.showToast({
          title: '选择图片失败',
          icon: 'none'
        });
      }
    });
  },

  // 删除云端文件
  _removeImage: function (fileId) {
    if (fileId) {
      // 使用wx.cloud.deleteFile删除文件
      wx.cloud.deleteFile({
        fileList: [fileId],
        success: (res) => {
          console.log('删除云端文件成功:', res);
        },
        fail: (err) => {
          console.error('删除云端文件失败:', err);
        }
      });
    }
  },

  // 预览群截图示例图
  onPreviewGroupExample: function () {
    wx.previewImage({
      urls: ['https://static.codia.ai/image/2025-10-27/Ni04DM9CmO.png'],
      current: 'https://static.codia.ai/image/2025-10-27/Ni04DM9CmO.png'
    });
  },

  // 预览个人截图示例图
  onPreviewPersonalExample: function () {
    wx.previewImage({
      urls: ['https://static.codia.ai/image/2025-10-27/X3mJg1Sgxi.png'],
      current: 'https://static.codia.ai/image/2025-10-27/X3mJg1Sgxi.png'
    });
  },

  // 提交表单
  onSubmitClick: function () {
    console.log('提交表单');
    
    const that = this;
    
    // 验证表单
    const hasInvitationCode = this.data.invitationCode && this.data.invitationCode.trim();
    const hasImages = (this.data.groupImage || this.data.personalImage);
    
    if (!hasInvitationCode && !hasImages) {
      wx.showToast({
        title: '请填写邀请码或上传图片',
        icon: 'none',
        duration: 2000
      });
      return;
    }

    // 准备提交数据 - 只传非空字段
    const requestData = {};
    
    // 只在有邀请码时传邀请码
    if (hasInvitationCode) {
      requestData.code = this.data.invitationCode.trim();
    }
    
    // 传递图片的 fileID（云存储文件ID）
    if (this.data.groupImageFileId) {
      requestData.imageUrl1 = this.data.groupImageFileId;
    }
    if (this.data.personalImageFileId) {
      requestData.imageUrl2 = this.data.personalImageFileId;
    }
    
    console.log('提交数据:', requestData);

    // 调用提交验证接口
    // 注意：util.request 会自动显示和隐藏 loading
    util.request(api.ApplyClub, requestData, 'POST', 'application/json')
      .then((res) => {
        // util.request 已经隐藏了 loading
        console.log('提交响应:', res);
        
        // 标准化响应数据
        const normalizedRes = util.normalizeApiResponse(res);
        
        if (normalizedRes.success) {
          // 标记为已提交成功，页面卸载时不删除文件
          that.setData({
            isSubmitted: true
          });
          
          wx.showModal({
            title: '提交成功',
            content: normalizedRes.message || '您的申请已提交，请等待审核。',
            showCancel: false,
            confirmText: '确定',
            success: () => {
              // 跳转到审核结果页面
              wx.navigateTo({
                url: '/pages/clubVerifyResult/clubVerifyResult',
                success: () => {
                  console.log('跳转到审核结果页面成功');
                },
                fail: (err) => {
                  console.error('跳转到审核结果页面失败:', err);
                  // 如果跳转失败，则返回上一页
                  wx.navigateBack();
                }
              });
            },
          });
        } else {
          // 显示错误信息
          const errorMsg = normalizedRes.message || '提交失败，请重试';
          wx.showToast({
            title: errorMsg,
            icon: 'none',
            duration: 2000
          });
        }
      })
      .catch((err) => {
        // util.request 已经隐藏了 loading
        console.error('提交失败:', err);
        
        // 区分不同类型的错误
        let errorMsg = '网络异常，请重试';
        
        // 如果是字符串错误，直接显示
        if (typeof err === 'string') {
          errorMsg = err;
        } else if (err.message) {
          errorMsg = err.message;
        }
        
        wx.showToast({
          title: errorMsg,
          icon: 'none',
          duration: 2000
        });
      });
  }
});
